import {take,put,fork} from 'redux-saga/effects';
import * as actionTypes from './action-types';
function delay(ms){
    return new Promise((resolve)=>{
        setTimeout(resolve,ms);
    });
}
function * workerSaga(){
    //产出一个Promise,用来命令sagaMiddleware等待Promise完成再继续执行
    yield delay(3000);
    console.log('start')
    //指令对象的创建器 表示要委托sagaMiddleware派发一个动作
    yield put({type:actionTypes.ADD})
}
//监听Saga,可以监听派发给仓库的动作，监听到之后可以进行后续操作
function * watcherSaga(){
    //创建一个 Effect 描述信息，用来命令 sagaMiddleware 在 Store 上等待指定的 action
    //在发起与 ASYNC_ADD 匹配的 action 之前，Generator 将暂停。
    //take只监听一次 once
    yield take(actionTypes.ASYNC_ADD);
    //一旦监听到了指定的动作类型，则会继续向下执行
    //当上面的action被 捕获的时候，继续向下执行workerSaga
    //当我们使用fork创建一个saga任务的时候，该任务会在后台运行，当前的saga或者说这个父 saga
    //不会等待fork saga任务完成，直接 继续向下执行
    //yield workerSaga();
    yield fork(workerSaga);
    console.log('over')
}
function * rootSaga(){
    yield watcherSaga();
}

export default rootSaga;